/**
 * APS 排程系统数据类型定义
 */

// 基础参数配置类型
export interface BaseParametersConfig {
  /** 预计开始时间 */
  startTime: string | null
  /** 计划结束时间 */
  endTime: string | null
  /** 选择的算法 */
  selectedAlgorithm: string | null
  /** 考虑加班优先 */
  useOvertime: boolean
  /** 均衡产能优先 */
  balanceCapacity: boolean
}

// 工作时段类型
export interface WorkPeriod {
  /** 开始时间 */
  startTime: string
  /** 结束时间 */
  endTime: string
  /** 错误信息 */
  error: string
}

// 加班时段类型
export interface OvertimePeriod {
  /** 开始时间 */
  startTime: string
  /** 结束时间 */
  endTime: string
  /** 错误信息 */
  error: string
}

// 每日工作配置类型
export interface DayWorkConfig {
  /** 星期几 (0-6) */
  day: number
  /** 星期名称 */
  dayName: string
  /** 是否展开 */
  expanded: boolean
  /** 生产时段列表 */
  workPeriods: WorkPeriod[]
  /** 加班时段 */
  overtimePeriod: OvertimePeriod | null
}

// 工作时间配置类型
export type WorkTimeConfiguration = DayWorkConfig[]

// 设备产能类型
export interface DeviceCapacity {
  /** 产能数值 */
  value: number | null
  /** 产能单位 */
  unit: string
}

// 维护计划类型
export interface MaintenancePlan {
  /** 维护计划名称 */
  name: string
  /** 开始日期 */
  startDate: string
  /** 结束日期 */
  endDate: string
  /** 维护类型 */
  type: string
  /** 错误信息 */
  error: string
}

// 设备配置类型
export interface DeviceConfig {
  /** 设备ID */
  id: number
  /** 设备名称 */
  name: string
  /** 设备数量 */
  quantity: number
  /** 设备产能 */
  capacity: DeviceCapacity
  /** 维护计划列表 */
  maintenancePlans: MaintenancePlan[]
  /** 是否展开 */
  expanded: boolean
  /** 错误信息 */
  errors: {
    name: string
    quantity: string
    capacity: string
  }
}

// 设备配置列表类型
export type DeviceConfiguration = DeviceConfig[]

// 工单信息类型
export interface WorkOrder {
  /** 内部ID */
  _id: string
  /** 工单编号 */
  workOrderId: string
  /** 订单编号 */
  orderId: string
  /** 产品编号 */
  productId: string
  /** 交付日期 */
  deliveryDate: string
  /** 数量 */
  quantity: number
  /** 优先级 */
  priority: string
}

// 约束配置项类型
export interface ConstraintItem {
  /** 约束ID */
  id: number
  /** 约束标题 */
  title: string
  /** 基础参数配置 */
  baseParameters: BaseParametersConfig
  /** 工作时间配置 */
  workTimeConfiguration: WorkTimeConfiguration
  /** 设备配置 */
  deviceConfiguration: DeviceConfiguration
}

// 约束配置类型
export interface ConstraintConfig {
  /** 当前选中的约束索引 */
  selectedConstraintIndex: number | null
  /** 当前选中的约束项 */
  selectedConstraintItem: ConstraintItem | Record<string, never>
  /** 约束列表 */
  constraints: ConstraintItem[]
}

// 完整的配置数据类型
export interface SchedulingConfiguration {
  /** 约束配置 */
  constraintConfig: ConstraintConfig
  /** 已选择的工单 */
  selectedOrders: WorkOrder[]
  /** 配置创建时间 */
  createdAt?: string
  /** 配置更新时间 */
  updatedAt?: string
}

// 推演方案输入数据类型
export interface SchedulingPlanInput {
  /** 约束配置名称 */
  constraintName: string
  /** 基础参数 */
  baseParameters: BaseParametersConfig
  /** 工作时间配置 */
  workTimeConfiguration: WorkTimeConfiguration
  /** 设备配置 */
  deviceConfiguration: DeviceConfiguration
  /** 工单列表 */
  workOrders: WorkOrder[]
  /** 生成时间戳 */
  timestamp: string
}

// 算法选项类型
export type AlgorithmOption = 'algoA' | 'algoB' | 'algoC'

// 产能单位类型
export type CapacityUnit = 'piece/hour' | 'ton/hour' | 'meter/hour' | 'piece/minute' | 'liter/hour'

// 维护类型
export type MaintenanceType = 'daily' | 'periodic' | 'overhaul' | 'emergency'

// 优先级类型
export type Priority = '高' | '中' | '低'

// 星期类型
export type DayOfWeek = '0' | '1' | '2' | '3' | '4' | '5' | '6'
